home *** CD-ROM | disk | FTP | other *** search
/ Aminet 1 / Aminet - June 1993 [Walnut Creek].iso / usenet / sources / volume90 / util / termintr / part01
Encoding:
Internet Message Format  |  1990-10-11  |  20.6 KB

  1. Path: wuarchive!zaphod.mps.ohio-state.edu!samsung!uunet!abcfd20.larc.nasa.gov!amiga-request
  2. From: amiga-request@abcfd20.larc.nasa.gov (Amiga Sources/Binaries Moderator)
  3. Newsgroups: comp.sources.amiga
  4. Subject: v90i276: Terminator 1.0 - virus killer, Part01/01
  5. Message-ID: <comp.sources.amiga:v90i276@abcfd20.larc.nasa.gov>
  6. Date: 11 Oct 90 00:32:40 GMT
  7. Reply-To: RWALLACE@vax1.tcd.ie
  8. Lines: 459
  9. Approved: tadguy@uunet.UU.NET (Tad Guy)
  10. X-Mail-Submissions-To: amiga@uunet.uu.net
  11. X-Post-Discussions-To: comp.sys.amiga
  12.  
  13. Submitted-by: RWALLACE@vax1.tcd.ie
  14. Posting-number: Volume 90, Issue 276
  15. Archive-name: util/terminator-1.0/part01
  16.  
  17. [ uuencoded executable enclosed  ...tad ]
  18.  
  19. This is a highly effective program to defend your system against boot block
  20. viruses.
  21.  
  22. The Terminator can be run from the CLI or Workbench. A window will come up
  23. with a selection of commands. Typing a number from 0 to 3 will
  24. protect/sterilize that floppy drive, typing Q will quit the program. The
  25. way The Terminator works is simple: It puts code in the boot block of the
  26. designated disk which causes the screen to flash red and yellow stripes for
  27. a fraction of a second on boot-up. The screen remains yellow for another
  28. couple of seconds of the boot process. If a virus infects that disk it will
  29. overwrite this code and the screen will no longer flash on boot-up. This
  30. provides warning of the virus infection.
  31.  
  32. #!/bin/sh
  33. # This is a shell archive.  Remove anything before this line, then unpack
  34. # it by saving it into a file and typing "sh file".  To overwrite existing
  35. # files, type "sh file -c".  You can also feed this as standard input via
  36. # unshar, or by typing "sh <file", e.g..  If this archive is complete, you
  37. # will see the following message at the end:
  38. #        "End of archive 1 (of 1)."
  39. # Contents:  Terminator.c Terminator.doc Terminator.uu Terminator0.uu
  40. #   Terminator1.uu bootcode.a
  41. # Wrapped by tadguy@abcfd20 on Wed Oct 10 20:32:38 1990
  42. PATH=/bin:/usr/bin:/usr/ucb ; export PATH
  43. if test -f 'Terminator.c' -a "${1}" != "-c" ; then 
  44.   echo shar: Will not clobber existing file \"'Terminator.c'\"
  45. else
  46. echo shar: Extracting \"'Terminator.c'\" \(2440 characters\)
  47. sed "s/^X//" >'Terminator.c' <<'END_OF_FILE'
  48. X/*
  49. XThe Terminator virus killer by Russell Wallace
  50. XSee documentation file for details
  51. XCompiled with Aztec C v3.4a using precompiled INCLUDE files and 16-bit ints
  52. XOther module bootcode.o must be assembled with the Aztec assembler as
  53. Xdetailed in the file bootcode.a
  54. XNB - Must be linked with data/BSS in chip memory using +CDB with Aztec
  55. Xlinker, because trackdisk.device buffers have to be in chip memory
  56. X*/
  57. X
  58. Xstruct MsgPort *diskport;
  59. Xstruct IOStdReq *diskreq;
  60. Xstruct FileHandle *window;
  61. Xint unit;   /* Disk drive 0..3 */
  62. Xchar buffer[2];   /* Drive number */
  63. Xlong code[256];   /* Buffer for boot block code */
  64. Xextern long bootcode[20];   /* 80 bytes of actual code in separate module */
  65. X
  66. Xmain (argc,argv)
  67. Xint argc;
  68. Xchar **argv;
  69. X{
  70. X    int i;
  71. X    for (i=0;i<20;i++)
  72. X    code[i]=bootcode[i];    /* Copy boot code into buffer */
  73. X        /* This is so memory after actual code will contain zeros */
  74. X    if (!(window=Open ("CON:0/50/640/120/The Terminator v1.0",MODE_NEWFILE)))
  75. X    exit (30);
  76. X    print ("The Terminator virus killer by Russell Wallace 6 Feb 1989\n\
  77. XWARNING - DO NOT USE ON A DISK WITH A CUSTOM BOOT BLOCK!\n");
  78. XRETYPE:
  79. X    print ("\
  80. XEnter a number from 0 to 3 to protect/sterilize that floppy drive\n\
  81. Xor type Q to quit: ");
  82. X    Read (window,buffer,2L);
  83. X    buffer[1]=0;
  84. X    if (buffer[0]=='q' || buffer[0]=='Q')
  85. X    {
  86. X    Close (window);
  87. X    return;
  88. X    }
  89. X    unit=buffer[0]-'0';
  90. X    if (unit<0 || unit>3)
  91. X    goto RETYPE;
  92. X    print ("Installing boot code on drive ");
  93. X    print (buffer);
  94. X    print ("...\n");
  95. X
  96. X    /* Initialize for use of trackdisk.device */
  97. X
  98. X    if (!(diskport=CreatePort (0L,0L)))
  99. X    {
  100. X    Close (window);
  101. X    exit (30);
  102. X    }
  103. X    if (!(diskreq=CreateStdIO (diskport)))
  104. X    {
  105. X    DeletePort (diskport);
  106. X    Close (window);
  107. X    exit (29);
  108. X    }
  109. X    if (OpenDevice (TD_NAME,(long)unit,diskreq,0L))
  110. X    {
  111. X    DeleteStdIO (diskreq);
  112. X    DeletePort (diskport);
  113. X    Close (window);
  114. X    exit (28);
  115. X    }
  116. X
  117. X    /* Write stuff */
  118. X
  119. X    diskreq->io_Length=1024;
  120. X    diskreq->io_Data=code;
  121. X    diskreq->io_Command=CMD_WRITE;
  122. X    diskreq->io_Offset=0;
  123. X    DoIO (diskreq);
  124. X
  125. X    /* Force update of track buffer to disk */
  126. X
  127. X    diskreq->io_Command=CMD_UPDATE;
  128. X    DoIO (diskreq);
  129. X
  130. X    /* Turn motor off */
  131. X
  132. X    diskreq->io_Length=0;
  133. X    diskreq->io_Command=TD_MOTOR;
  134. X    DoIO (diskreq);
  135. X
  136. X    /* Clean up and go back to menu */
  137. X
  138. X    CloseDevice (diskreq);
  139. X    DeleteStdIO (diskreq);
  140. X    DeletePort (diskport);
  141. X    goto RETYPE;
  142. X}
  143. X
  144. Xprint (s)
  145. Xchar *s;
  146. X{
  147. X    Write (window,s,(long)strlen (s));
  148. X}
  149. END_OF_FILE
  150. if test 2440 -ne `wc -c <'Terminator.c'`; then
  151.     echo shar: \"'Terminator.c'\" unpacked with wrong size!
  152. fi
  153. # end of 'Terminator.c'
  154. fi
  155. if test -f 'Terminator.doc' -a "${1}" != "-c" ; then 
  156.   echo shar: Will not clobber existing file \"'Terminator.doc'\"
  157. else
  158. echo shar: Extracting \"'Terminator.doc'\" \(6067 characters\)
  159. sed "s/^X//" >'Terminator.doc' <<'END_OF_FILE'
  160. XThe Terminator virus killer v1.0 (C) Copyright 1989 by Russell Wallace.
  161. XThis is a highly effective program to defend your system against boot block
  162. Xviruses. First, I'll explain how boot block viruses work. Sectors 0 and 1
  163. X(the first 1024 bytes) of a disk which can be inserted in response to the
  164. XWorkbench prompt after resetting the Amiga contain code which gets executed
  165. Xbefore anything else is done. This is useful for game title screens and the
  166. Xlike. A virus lives on the boot block. It gets loaded into memory when the
  167. Xmachine is booted up, and stays there until you turn the power off (most
  168. Xviruses can survive reset). The original SCA virus would then write a copy
  169. Xof itself into the boot block of any disk you used to boot the Amiga,
  170. Xbefore it actually booted up. Thus the virus would spread slowly
  171. Xthroughout your disk collection and whenever you gave a copy of an infected
  172. Xdisk to anyone else you would give them the virus as well. More recent
  173. Xviruses such as Byte Bandit, Byte Warrior etc. are far more virulent - they
  174. Xinfect every disk you put in the drive, not just disks you boot from.
  175. XUnlike the situation on the IBM and Macintosh, most Amiga viruses do no
  176. Xdeliberate damage but they can still accidentally crash your system. More
  177. Ximportantly if a program such as a game is using the boot block for
  178. Xsomething and the virus writes a copy of itself into the boot block, it
  179. Xwill destroy whatever is already there.
  180. X
  181. XThe Terminator can be run from the CLI or Workbench. A window will come up
  182. Xwith a selection of commands. Typing a number from 0 to 3 will
  183. Xprotect/sterilize that floppy drive, typing Q will quit the program. The
  184. Xway The Terminator works is simple: It puts code in the boot block of the
  185. Xdesignated disk which causes the screen to flash red and yellow stripes for
  186. Xa fraction of a second on boot-up. The screen remains yellow for another
  187. Xcouple of seconds of the boot process. If a virus infects that disk it will
  188. Xoverwrite this code and the screen will no longer flash on boot-up. This
  189. Xprovides warning of the virus infection. Eliminating the virus is slightly
  190. Xmore complex. The basic idea is that you have to overwrite the virus code
  191. Xin the boot block with something harmless - the normal method is to use the
  192. XAmigaDOS INSTALL command to put normal boot code in, but you can simply use
  193. XThe Terminator to replace the code to flash the screen on boot-up. The
  194. Xproblem is that while the virus is in memory, it will probably block any
  195. Xattempt to overwrite its code in the boot block. The solution is as
  196. Xfollows: Turn your Amiga off and on again to clear the virus out of memory
  197. X(most viruses can survive an ordinary reset). Boot up with a disk you are
  198. Xsure is free of infection. Write-protecting disks will prevent
  199. Xthem being infected, and using The Terminator on them before you
  200. Xwrite-protect them will provide confirmation that the disk is still clean
  201. Xon boot-up. Once you have rebooted with the clean disk, load up The
  202. XTerminator and use it on all the infected disks to kill the virus.
  203. X
  204. XSo, to summarize: Use The Terminator on all your normal bootable disks. If
  205. Xany of them ever stop flashing red and yellow stripes on the screen on
  206. Xboot-up you have a virus. At least one of the disks should be
  207. Xwrite-protected after using The Terminator on it to prevent it ever getting
  208. Xinfected. Turn the power off and on again, re-boot with a write-protected
  209. Xsystem disk, load up The Terminator and use it on all infected disks.
  210. X
  211. XOther virus killers such as VirusX are designed to detect specific viruses
  212. Xin memory. This is fine for use against those viruses but if a new one or a
  213. Xmutant strain of an old one is written which the virus killer does not know
  214. Xabout, it will be useless. The Terminator will protect against any
  215. Xboot block virus. It also does not consume any memory or disk space and
  216. Xonly adds a fraction of a second to your boot up time, because it doesn't
  217. Xput anything in your startup-sequence. Virus killers that look for
  218. Xnonstandard boot blocks can give false alarms if they see a harmless
  219. Xnonstandard boot block. The Terminator can't give any false alarms because
  220. Xanything that overwrites the flashing screen code in the boot block without
  221. Xyour knowledge is almost by definition a virus.
  222. X
  223. XWARNING: DO NOT USE THE TERMINATOR ON ANY DISKS WITH CUSTOM BOOT BLOCKS!
  224. XMost games put code in the boot block. Using The Terminator on these disks
  225. Xwill overwrite the boot block and destroy the game. Note that if any game
  226. Xis still working after being infected with the virus, it must not have had
  227. Xany code in the boot block otherwise the virus would have destroyed it, so
  228. XThe Terminator can be used to kill the virus.
  229. X
  230. XThe Terminator may be freely used, copied and distributed. The source code
  231. Xmay be used as a source of programming information. If you find it useful
  232. X(e.g. if it saves your system from virus infection), I would appreciate it
  233. Xif you would send a donation of about 10 pounds (US $15) to me:
  234. XRussell Wallace, 24 Lower Georges St, Dunlaoghaire, Co. Dublin, Ireland.
  235. XIn return I will send you a disk of my latest shareware/public domain
  236. Xprograms including the latest version of The Terminator. When distributing
  237. Xthis program please also distribute the source code. The reason for this is
  238. Xthat there are several programs around which actually infect disks under the
  239. Xpretense of killing viruses. The source code has to be available to prove
  240. Xthat the program does what it says it does.
  241. X
  242. XThe Terminator provides an almost invulnerable defense against boot block
  243. Xviruses - the only way anything could get past it unnoticed is if the virus
  244. Xitself flashed the screen red and yellow if it noticed that The Terminator
  245. Xwas there before it. The present version provides no protection against
  246. Xviruses which attach themselves to program files. Later versions hopefully
  247. Xwill. In order for this defense to be more effective please send me a copy
  248. Xof any such virus you come across - even if you get infected by a boot
  249. Xblock virus, please send me a copy before you wipe it out. I need viruses
  250. Xto test my virus killer on.
  251. X
  252. XSo long, and happy virus hunting!
  253. X
  254. END_OF_FILE
  255. if test 6067 -ne `wc -c <'Terminator.doc'`; then
  256.     echo shar: \"'Terminator.doc'\" unpacked with wrong size!
  257. fi
  258. # end of 'Terminator.doc'
  259. fi
  260. if test -f 'Terminator.uu' -a "${1}" != "-c" ; then 
  261.   echo shar: Will not clobber existing file \"'Terminator.uu'\"
  262. else
  263. echo shar: Extracting \"'Terminator.uu'\" \(4652 characters\)
  264. sed "s/^X//" >'Terminator.uu' <<'END_OF_FILE'
  265. Xbegin 644 Terminator
  266. XM```#\P`````````#``````````(```,,0``!*0````$```/I```##$[Z`SY.'
  267. XM5?_^0FW__C`M__Y(P.6`0>R``C(M__Y(P>6!0^R`IB.P"``8`%)M__X,;0`40
  268. XM__YMUDAX`^Y(>@&Z3KH(_%!/*4"`EF8*/SP`'DZZ!VY43TAZ`<5.N@+`6$]("
  269. XM>@(O3KH"MEA/2'@``DAL@(PO+("63KH(X$_O``Q"+("-#"P`<8",9P@,+`!1G
  270. XM@(QF#B\L@)9.N@B"6$].74YU$"R`C$B`D'P`,#E`@(I*;("*;:P,;``#@(INS
  271. XMI$AZ`BE.N@):6$](;(",3KH"4%A/2'H"-$ZZ`D983T*G0J=.N@C04$\I0(".4
  272. XM9A0O+("63KH(*EA//SP`'DZZ!L943R\L@(Y.N@F66$\I0("29AXO+(".3KH),
  273. XM*%A/+RR`EDZZ!_Q83S\\`!U.N@:85$]"IR\L@)(P+("*2,`O`$AZ`<].N@J`J
  274. XM3^\`$$J`9R@O+("23KH)8%A/+RR`CDZZ".)83R\L@)9.N@>V6$\_/``<3KH&P
  275. XM4E1/(&R`DB%\```$```D0>R`IB)L@)(C2``H(&R`DC%\``,`'"!L@))"J``L\
  276. XM+RR`DDZZ";)83R!L@)(Q?``$`!PO+("23KH)GEA/(&R`DD*H`"0@;("2,7P`\
  277. XM"0`<+RR`DDZZ"8)83R\L@)).N@>X6$\O+("23KH(REA/+RR`CDZZ"$Q83V``A
  278. XM_FI#3TXZ,"\U,"\V-#`O,3(P+U1H92!497)M:6YA=&]R('8Q+C``5&AE(%1E%
  279. XM<FUI;F%T;W(@=FER=7,@:VEL;&5R(&)Y(%)U<W-E;&P@5V%L;&%C92`V($9EG
  280. XM8B`Q.3@Y"E=!4DY)3D<@+2!$3R!.3U0@55-%($].($$@1$E32R!7251(($$@A
  281. XM0U535$]-($)/3U0@0DQ/0TLA"@!%;G1E<B!A(&YU;6)E<B!F<F]M(#`@=&\@4
  282. XM,R!T;R!P<F]T96-T+W-T97)I;&EZ92!T:&%T(&9L;W!P>2!D<FEV90IO<B!TE
  283. XM>7!E(%$@=&\@<75I=#H@`$EN<W1A;&QI;F<@8F]O="!C;V1E(&]N(&1R:79E:
  284. XM(``N+BX*`'1R86-K9&ES:RYD979I8V4`3E4``"\M``A.N@2(6$](P"\`+RT`G
  285. XM""\L@)9.N@8R3^\`#$Y=3G5A<$/L@%9%[(!6M<EF#C(\`1-K"'0`(L)1R?_\B
  286. XM*4^`5BQX``0I3H!:2.>`@`@N``0!*6<02_H`"$ZN_^)@!D*G\U].<T/Z`"!.(
  287. XMKOYH*4"`7F8,+CP``X`'3J[_E&`$3KH`&E!/3G5D;W,N;&EB<F%R>0!)^0``C
  288. XM?_Y.=4Y5```O"DAY``$``#`L@%+!_``&+P!.N@=R4$\I0(!B9A1"ITAY``$`.
  289. XM`$ZZ!9103RYL@%9.=2!L@&)":``$(&R`8C%\``$`$")L@&(S?``!``H@;(!6'
  290. XM("R`5I"H``10@"E`@&8@;(!F(+Q-04Y80J=.N@=`6$\D0$JJ`*QG+B\M``PO.
  291. XM+0`(+PI.N@"R3^\`##E\``&`:B!L@&(`:(````0@;(!B`&B````*8$1(:@!<^
  292. XM3KH'D%A/2&H`7$ZZ!RI83RE`@&P@;(!L2J@`)&<0(&R`;")H`"0O$4ZZ!)18L
  293. XM3R\L@&PO"DZZ`EA03REL@&R`<$ZZ!(@@;(!B((!.N@28(&R`8B%```9G%DAX9
  294. XM`^U(>@`L3KH$=%!/(&R`8B%```PO+(!P/RR`=$ZZ^R)<3T)G3KH"U%1/)%].-
  295. XM74YU*@!.50``2.<,,"1M`!`@;0`(("@`K.6`*``@1"`H`!#E@"9`$!-(@$C`)
  296. XMT*T`#%2`.4"`=D*G,"R`=DC`+P!.N@804$\I0(!X9@A,WPPP3EU.=1`32(`_)
  297. XM`"!+4H@O""\L@'A.N@%$3^\`"DAZ`3H0$TB`2,#0K(!X+P!.N@%X4$\_+0`.1
  298. XM+PHO+(!X3KH!1$_O``I";(!T)FR`>"1+$!-(@#H`L'P`(&<8NGP`"6<2NGP`:
  299. XM#&<,NGP`#6<&NGP`"F8$4HM@V`P3`"!M>@P3`")F+E*+($M2BQ`02(`Z`&<>U
  300. XM($I2BA"%NGP`(F80#!,`(F8$4HM@!D(J__]@`F#68#@@2U*+$!!(@#H`9R:ZB
  301. XM?``@9R"Z?``)9QJZ?``,9Q2Z?``-9PZZ?``*9P@@2E**$(5@SB!*4HI"$$I%W
  302. XM9@)3BU)L@'1@`/]:0A)"IS`L@'120$C`Y8`O`$ZZ!/I03RE`@'!F"$)L@'1@:
  303. XM`/[D>@`F;(!X8!XP!4C`Y8`@;(!P(8L(`"\+3KH!-EA/4D!(P-?`4D6Z;(!TX
  304. XM;=PP!4C`Y8`@;(!P0K`(`&``_J8@`$SO`P``!"`(,B\`#&`"$-E7R?_\9P92!
  305. XM06`"0AA1R?_\3G4P/'__8`0P+P`,(&\`!$H89OQ32")O``A30!#95\C__&<"8
  306. XM0A`@+P`$3G4@;P`$(`@B;P`($-EF_$YU3E4``$CG#C`D;0`(0J=(>@".3KH$X
  307. XMR%!/*4"`FF8(3-\,<$Y=3G4@;0`,(F@`)"\I``1.N@3V6$\H`&=22'H`;2!$M
  308. XM+R@`-DZZ!,A03R9`2H!G-$AX`^TO"TZZ`>Y03RP`9R0@!N6`*@`@125H``@`Q
  309. XMI"5&`)Q(>`/M2'H`.$ZZ`<I03R5``*`O!$ZZ!)183R\L@)I.N@(26$]"K(":&
  310. XM8(!I8V]N+FQI8G)A<GD`5TE.1$]7`"H`(&\`!"`(2AAF_)'`(`A3@$YU3E4`?
  311. XM`$JL@)YG!B!L@)Y.D#\M``A.N@`(5$].74YU3E7__"\$,"T`"$C`*T#__$JLX
  312. XM@&)G*'@`8`H_!$ZZ`-!43U)$N&R`4FWP,"R`4L'\``8O`"\L@&).N@-N4$]*Y
  313. XMK("B9P8@;("B3I!*K(!\9PHO+(!\3KH!<%A/2JR`@&<*+RR`@$ZZ`6!83TJLI
  314. XM@(1G"B\L@(1.N@%06$\L>``$""X`!`$I9Q0O#4OZ``I.KO_B*E]@!D*G\U].[
  315. XM<TJL@&QF,$JL@'AG*#`L@'9(P"\`+RR`>$ZZ`O103S`L@'120$C`Y8`O`"\LZ
  316. XM@'!.N@+>4$]@#DZZ`LHO+(!L3KH#.EA/("W__"YL@%9.=2@?3EU.=4Y5``!('
  317. XMYPX@."T`"#`$P?P`!B1`U>R`8DI$;0JX;(!2;`1*DF80.7P``H"(</],WP1P*
  318. XM3EU.=3`J``3`?(``9@@O$DZZ``Y83T*2<`!@X$[Z``(B+P`$+&R`7D[N_]PB&
  319. XM+P`$+&R`7D[N_X(L;(!>3N[_RD[Z``),[P`&``0L;(!>3N[_XBQL@%Y.[O_$X
  320. XM3OH``DSO``X`!"QL@%Y.[O_63OH``DSO``X`!"QL@%Y.[O_02.<!!$SO((``%
  321. XM#"QL@%I.KO^43-\@@$YU(F\`!"QL@%I.[OX^3OH``B)O``0L;(!:3N[^8DY5J
  322. XM``!(YP@@2'C__TZZ`-!83R@`L+S_____9@IP`$S?!!!.74YU2'D``0`!2'@`T
  323. XM(DZZ`6!03R1`2H!F#"\$3KH!IEA/<`!@UB5M``@`"A5M``\`"15\``0`"$(J`
  324. XM``X51``/0J=.N@%46$\E0``02JT`"&<*+PI.N@!:6$]@"DAJ`!1.N@%Z6$\@$
  325. XM"F"23E4``"\*)&T`"$JJ``IG""\*3KH!EEA/%7P`_P`()7S_____`!1P`!`J0
  326. XM``\O`$ZZ`2I83TAX`"(O"DZZ`0I03R1?3EU.=2)O``0L;(!:3N[^GB`O``0LT
  327. XM;(!:3N[^MDY5``!(>``P+RT`"$ZZ`!I03TY=3G5.50``+RT`"$ZZ`$Q83TY=)
  328. XM3G5.50``+PI*K0`(9@AP`"1?3EU.=4AY``$``2\M``Q.N@!@4$\D0$J`9@1PG
  329. XM`&#@%7P`!0`(-6T`#@`2)6T`"``.(`I@RDY5```O"B1M``@@"F8&)%].74YU8
  330. XM%7P`_P`()7S_____`!0E?/____\`&'``,"H`$B\`+PI.N@!&4$]@TD[Z``),W
  331. XM[P`#``0L;(!:3N[_.DCG`P`B;P`,+&R`6DZN_CA,WP#`3G5.^@`"(F\`!"QLU
  332. XM@%I.[O[:+&R`6D[N_WQ.^@`"(F\`!"`O``@L;(!:3N[_+B`O``0L;(!:3N[^G
  333. XML"!O``0L;(!:3N[^C"!O``0@B%B00J@`!"%(``A.=2!O``1,[P(!``@B+P`0Z
  334. XM+&R`6D[N_D0L;(!:(F\`!"`O``A.[OW8(F\`!"QL@%I.[OZ8(F\`!"QL@%I.-
  335. XM[OZ&(&\`!"QL@%I.[OZ`3.\#```$+&R`FD[N_Z`@;P`$+&R`FD[N_Z8@;P`$Y
  336. XM+&R`FD[N_[(``````^P````!`````0```[0````````#\@```^H````51$]3D
  337. XM`(6PE>P```-P<%`R/`#(,_P/``#?\8!1R?_V,CP`R#/\#_``W_&`4<G_]E'(8
  338. XM_]Y#^@`03J[_H"!`(&@`%G``3G5D;W,N;&EB<F%R>0``%``````#\@```^L`6
  339. X'```!```#\J[_C
  340. X``
  341. Xend
  342. Xsize 3292
  343. END_OF_FILE
  344. if test 4652 -ne `wc -c <'Terminator.uu'`; then
  345.     echo shar: \"'Terminator.uu'\" unpacked with wrong size!
  346. fi
  347. # end of 'Terminator.uu'
  348. fi
  349. if test -f 'Terminator0.uu' -a "${1}" != "-c" ; then 
  350.   echo shar: Will not clobber existing file \"'Terminator0.uu'\"
  351. else
  352. echo shar: Extracting \"'Terminator0.uu'\" \(561 characters\)
  353. sed "s/^X//" >'Terminator0.uu' <<'END_OF_FILE'
  354. Xbegin 644 Terminator.doc.info
  355. XMXQ```0``````S``>`"@`%0`$``,``0#"AC``````````````````````````;
  356. XM````!`@`P>,0`````````,@````3```````````````````````H`!4``@`!;
  357. XM>Z@#```````````````____,```____/```____/P``X`__/\``____````XU
  358. XM`____``______``______``_A`#`?``______``Y`(``?``______``X``!`)
  359. XM?``______``______``___X`?``______``______`````````````````#_3
  360. XM___\``#````S``#````PP`#````P,`#'_``P#`#````__P#'_````P#``````
  361. XM`P#``````P#`>_\_@P#``````P#&_W__@P#``````P#'__^_@P#``````P#`8
  362. XM`````P#```'_@P#``````P#``````P#______P`````````````+.DUO<W0O>
  363. X%36]S=`#`C
  364. X``
  365. Xend
  366. Xsize 365
  367. END_OF_FILE
  368. if test 561 -ne `wc -c <'Terminator0.uu'`; then
  369.     echo shar: \"'Terminator0.uu'\" unpacked with wrong size!
  370. fi
  371. # end of 'Terminator0.uu'
  372. fi
  373. if test -f 'Terminator1.uu' -a "${1}" != "-c" ; then 
  374.   echo shar: Will not clobber existing file \"'Terminator1.uu'\"
  375. else
  376. echo shar: Extracting \"'Terminator1.uu'\" \(1124 characters\)
  377. sed "s/^X//" >'Terminator1.uu' <<'END_OF_FILE'
  378. Xbegin 644 Terminator.info
  379. XMXQ```0``````-0`5`#H`*P`%``,``0#!XX``````````````````````````0
  380. XM`````[P``````````````#$````*```````````````````````Z`"H``@`!A
  381. XM;$@#``````````!X<````````/_````````!@P````````,&`````````_P`J
  382. XM```````"&`````````,P`````````<`````````!P````$````/``A``````D
  383. XM!Z`````````$(`P```````0($`````$`"ZP0!````B`E@D`!```"$B8""3@`&
  384. XM`$`0(Q"`H````($@RXH`@````OD(`@C````L@C\*``0``!$`"@D!```!`!:`=
  385. XM"`````````7P`````0@P``@``````"`#"``````B@('X`````!```#``````$
  386. XM!``#\`````(``!_X````````8!@`````@`#`,````````?_@```````#`,``;
  387. XM``````(!@````````_X````````&&`````````1P````````!X`````````.K
  388. XM`````````!L`````````/X`````````@P````````````````````#X`````X
  389. XM`````````````````````````?```````````````````````````````(``Q
  390. XM`````````````````````!```````8``````````````````````````````1
  391. XM`R`0`````````$``````$``"`0`````0(A````````$@`P```````O@``@@`P
  392. XM````@`,*`````!$```````````(```````````#P``````@``````````"``X
  393. XM```````````@`````!````````````````````(```'@````````````````3
  394. XM`````````````'^``````````````````````````````?@`````````````X
  395. XM`````````````````@``````````````````````````````#```````````.
  396. X%`````````
  397. X``
  398. Xend
  399. Xsize 770
  400. END_OF_FILE
  401. if test 1124 -ne `wc -c <'Terminator1.uu'`; then
  402.     echo shar: \"'Terminator1.uu'\" unpacked with wrong size!
  403. fi
  404. # end of 'Terminator1.uu'
  405. fi
  406. if test -f 'bootcode.a' -a "${1}" != "-c" ; then 
  407.   echo shar: Will not clobber existing file \"'bootcode.a'\"
  408. else
  409. echo shar: Extracting \"'bootcode.a'\" \(1048 characters\)
  410. sed "s/^X//" >'bootcode.a' <<'END_OF_FILE'
  411. X;Code for boot block to put red and yellow stripes on the screen
  412. X;by Russell Wallace 6 Feb 1989
  413. X;This code was assembled with Aztec Assembler 3.6a, linked then disassembled
  414. X;with DisAsm. The hex dump of the code was typed into CMon, a boot checksum
  415. X;was calculated and the 1K boot block was saved to a file. The first 80
  416. X;bytes of the file were chopped off with Cut into another file and this was
  417. X;then converted with my File2Manx program into an object file for linking
  418. X;with the Aztec linker 3.4a. An involved process but you can assemble this
  419. X;file then verify that the code produced is the same as the code placed in
  420. X;the boot block by the program.
  421. X
  422. X_LVOFindResident        equ        -96
  423. X
  424. X        moveq        #80,d0
  425. Xloop
  426. X        move.w        #200,d1
  427. Xloop1
  428. X        move.w        #$0f00,$dff180    ;Make screen red
  429. X        dbf        d1,loop1
  430. X        move.w        #200,d1
  431. Xloop2
  432. X        move.w        #$0ff0,$dff180    ;Make screen yellow
  433. X        dbf        d1,loop2
  434. X        dbf        d0,loop
  435. X
  436. X        lea        dos_name,a1    ;Do normal boot sequence
  437. X        jsr        _LVOFindResident(a6)
  438. X        move.l        d0,a0
  439. X        move.l        22(a0),a0
  440. X        moveq        #0,d0
  441. X        rts
  442. X
  443. Xdos_name    dc.b        'dos.library',0
  444. X
  445. END_OF_FILE
  446. if test 1048 -ne `wc -c <'bootcode.a'`; then
  447.     echo shar: \"'bootcode.a'\" unpacked with wrong size!
  448. fi
  449. # end of 'bootcode.a'
  450. fi
  451. echo shar: End of archive 1 \(of 1\).
  452. cp /dev/null ark1isdone
  453. MISSING=""
  454. for I in 1 ; do
  455.     if test ! -f ark${I}isdone ; then
  456.     MISSING="${MISSING} ${I}"
  457.     fi
  458. done
  459. if test "${MISSING}" = "" ; then
  460.     echo You have the archive.
  461.     rm -f ark[1-9]isdone
  462. else
  463.     echo You still need to unpack the following archives:
  464.     echo "        " ${MISSING}
  465. fi
  466. ##  End of shell archive.
  467. exit 0
  468. -- 
  469. Mail submissions (sources or binaries) to <amiga@uunet.uu.net>.
  470. Mail comments to the moderator at <amiga-request@uunet.uu.net>.
  471. Post requests for sources, and general discussion to comp.sys.amiga.
  472.